package cn.design;

import cn.design.model.Product;
import cn.design.realize.AdminProductObserver;
import cn.design.realize.CustomerProductObserver;
import cn.design.realize.ProductObserver;
import cn.design.realize.ProductStore;
import cn.design.realize.StoreSubject;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author dlq
 * @description 观察者客户端调用类:
 *
 * @date 2020/10/14 10:14
 * @since 1.0
 */
public class ObserverClientDemo {
    public static void main(String[] args) {
        //假设,有新商品上架或者商品价格有更改会通知到 客户已经管理员(商品)

        //1. 定义 一个 管理和 和一个 客户(可以多个管理员和多个客户)
        //ProductObserver 可以定义成抽象类
        ProductObserver admin = new AdminProductObserver("武商");
        ProductObserver customer  = new CustomerProductObserver("王客户");

        //2. 定义产品
        Product product1 = new Product("牙刷",5.5D);

        Product product2= new Product("洗衣粉",12.9D);
        //3.定义主题
        StoreSubject storeSubject = new ProductStore();

        //4.主题添加观察者
        storeSubject.addProductObserver(admin);
        storeSubject.addProductObserver(customer);
        //5.添加商品
        storeSubject.notifyAddProduct("add",product1);
        storeSubject.notifyAddProduct("add",product2);
        //6.修改商品价格
        product2.setPrice(9.9D);
        storeSubject.notifyProductUpdatePrice("update",product2);

        //7.移除 客户
        List<ProductObserver>  list = storeSubject.removeProductObserver(customer);
        System.out.println(list.size());

    }
}
